/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author user
 */
// VerticalLayout.java
// Простой менеджер расположения, располагает
// компоненты в вертикальный ряд
import java.awt.*;
import javax.swing.*;
public class VerticalLayout implements LayoutManager {
// сигнал расположить компоненты в контейнере
public void layoutContainer(Container c) {
Component comps[] = c.getComponents();
int currentY = 5;
for (int i=0; i<comps.length; i++) {
// предпочтительный размер компонента
Dimension pref = comps[i].getPreferredSize();
// указываем положение компонента на экране
comps[i].setBounds(5, currentY,
pref.width, height);
// промежуток в 5 пикселов
currentY += 5;
currentY += pref.height;
}
}
// эти два метода нам не понадобятся
public void addLayoutComponent(
String name, Component comp) {
}
public void removeLayoutComponent(
Component comp) {
}
// минимальный размер для контейнера
public Dimension minimumLayoutSize(Container c) {
return calculateBestSize(c);
}
// предпочтительный размер для контейнера
public Dimension preferredLayoutSize(Container c) {
return calculateBestSize(c);
}
private Dimension size = new Dimension();
// вычисляет оптимальный размер контейнера
private Dimension calculateBestSize(Container c) {
// сначала вычислим длину контейнера
Component[] comps = c.getComponents();
int maxWidth = 0;
for (int i=0; i<comps.length; i++) {
int width = comps[i].getWidth();
// поиск компонента с максимальной длиной
if ( width > maxWidth ) = width;
}
// длина контейнера с учетом левого отступа
size.width = maxWidth + 5;
// вычисляем высоту контейнера
int height = 0;
for (int i=0; i<comps.length; i++) {
height += 5;
height += comps[i].getHeight();
}
size.height = height;
return size;
}
// проверим работу нового менеджера
public static void main(String[] args) {
JFrame frame = new JFrame("VerticalLayout");
frame.setSize(400, 400);
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
// панель будет использовать новое расположение
JPanel contents = new JPanel(
new VerticalLayout());
// добавим пару кнопок и текстовое поле
contents.add(new JButton("Один"));
contents.add(new JButton("Два"));
contents.add(new JTextField(30));
frame.setContentPane(contents);
frame.setVisible(true);
}
}